package com.dhecp.project.business.service;

import java.util.List;
import java.util.Map;

import com.dhecp.common.core.domain.AjaxResult;
import com.dhecp.project.business.domain.ProductBasis;
import com.dhecp.project.business.domain.ProductBasisCompete;
import com.dhecp.project.business.domain.ProductBasisComponent;

/**
 * 基础商品库  业务层
 * @author DH-Xxj
 * @version 2022年7月13日
 */
public interface ProductBasisService {
	
	/**
     * 查询基础商品库
	 * @param params
	 * @return List - ProductBasis
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductBasis> queryProductBasis(Map<String, Object> params) throws Exception;
	
	/**
     * 查询基础商品子件
	 * @param params
	 * @return List - ProductBasisComponent
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductBasisComponent> queryProductBasisComponent(Map<String, Object> params) throws Exception;
	
	/**
     * 查询基础竞品库
	 * @param params
	 * @return List - ProductBasisCompete
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductBasisCompete> queryProductBasisCompete(Map<String, Object> params) throws Exception;
	
	/**
	 * 通过guid查询单条基础商品库
	 * @param guid
	 * @return 实体 ProductBasis
	 * @author DH-Xxj
	 */
	ProductBasis queryProductBasisByGuid(String guid);

	/**
	 * 通过code查询单条基础商品库
	 * @param code
	 * @return 实体 ProductBasis
	 * @author DH-Xxj
	 */
	ProductBasis queryProductBasisByCode(String code);
	
	/**
	 * 通过guid查询单条基础商品子件
	 * @param guid
	 * @return 实体 ProductBasisComponent
	 * @author DH-Xxj
	 */
	ProductBasisComponent queryProductBasisComponentByGuid(String guid);
	
	/**
	 * 通过guid查询单条基础竞品库
	 * @param guid
	 * @return 实体 ProductBasisCompete
	 * @author DH-Xxj
	 */
	ProductBasisCompete queryProductBasisCompeteByGuid(String guid);
	
	/**
	 * 通过pcode查询基础商品子件
     * @param pcode 必要参数：商品母件编码
     * @return List - ProductBasisComponent
	 * @author DH-Xxj
	 */
	List<ProductBasisComponent> queryProductBasisComponentBypcode(String pcode);
	List<ProductBasisComponent> queryProductBasisComponentBypcode2(Map<String, Object> params) throws Exception;

	/**
	*@Description: 获取已选中的母件商品
	*@Param: code
	*@return: java.util.List<com.dhecp.project.business.domain.ProductBasis>
	*@Author: hlf
	*@date: 2022-08-19 9:00
	*/
	List<ProductBasis> queryProductBasisList(Map<String, Object> params) throws Exception;

	/**
	 * 通过pcode查询基础竞品库
     * @param pcode 必要参数：商品母件编码
     * @return List - ProductBasisCompete
	 * @author DH-Xxj
	 */
	List<ProductBasisCompete> queryProductBasisCompeteBypcode(String pcode);

	/**
	 * 清理商品导入过渡表中遗留的数据
	 * @param params
	 * @return AjaxResult
	 * @author DH-Xxj
	 */
	AjaxResult cleanProductBasisImport(Map<String, Object> params);

	/**
	 * 将本次导入的商品数据从商品导入过渡表中转入商品库正式表
	 * @param records 导入总记录数int类型
	 * @return AjaxResult
	 * @author DH-Xxj
	 */
	AjaxResult importToProductBasis(Map<String, Object> params);

	/**
	 * 导入产品信息至产品信息过渡表
	 * @param productBasisItems 必要参数：基础商品库对应实体类（ProductBasis）的json格式字符串
	 * @return MessageModel
	 * @author DH-Xxj
	 */
	AjaxResult importProductBasis(Map<String, Object> params);

	/**
	 * 新增基础商品库
	 * @param productBasisItems 必要参数：基础商品库对应实体类（ProductBasis）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult insertProductBasis(Map<String, Object> params);

	/**
	 * 新增基础商品子件
	 * @param productBasisComponentItems 必要参数：基础商品子件对应实体类（ProductBasisComponent）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult insertProductBasisComponent(Map<String, Object> params);

	/**
	 * 新增基础竞品库
	 * @param productBasisCompeteItems 必要参数：基础竞品库对应实体类（ProductBasisCompete）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult insertProductBasisCompete(Map<String, Object> params);

	/**
	 * 保存基础商品子件（先删除后新增）
	 * @param pcode 必要参数：基础商品库中的商品编码（code）
	 * @param productBasisComponentItems 必要参数：基础商品子件对应实体类（ProductBasisComponent）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult saveProductBasisComponent(Map<String, Object> params);

	/**
	 * 保存基础竞品库（先删除后新增）
	 * @param pcode 必要参数：基础商品库中的商品编码（code）
	 * @param productBasisCompeteItems 必要参数：基础竞品库对应实体类（ProductBasisCompete）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult saveProductBasisCompete(Map<String, Object> params);
	
	/**
	 * 修改基础商品库
	 * @param productBasisItems 必要参数：基础商品库对应实体类（ProductBasis）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult updateProductBasis(Map<String, Object> params);
	
	/**
	 * 修改基础商品子件
	 * @param productBasisComponentItems 必要参数：基础商品子件对应实体类（ProductBasisComponent）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult updateProductBasisComponent(Map<String, Object> params);
	
	/**
	 * 修改基础竞品库
	 * @param productBasisCompeteItems 必要参数：基础竞品库对应实体类（ProductBasisCompete）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult updateProductBasisCompete(Map<String, Object> params);
	
	/**
	 * 通过Guid删除基础商品库
	 * @param productBasisItems 必要参数：基础商品库对应实体类（ProductBasis）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult deleteProductBasisByGuid(Map<String, Object> params);
	
	/**
	 * 通过Guid删除基础商品库（完整删除，包含子件和竞品）
	 * @param productBasisItems 必要参数：基础商品库对应实体类（ProductBasis）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult deleteProductBasisCompleteByGuid(Map<String, Object> params);
	
	/**
	 * 通过Guid删除基础商品子件
	 * @param productBasisComponentItems 必要参数：基础商品子件对应实体类（ProductBasisComponent）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult deleteProductBasisComponentByGuid(Map<String, Object> params);
	
	/**
	 * 通过Guid删除基础竞品库
	 * @param productBasisCompeteItems 必要参数：基础竞品库对应实体类（ProductBasisCompete）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult deleteProductBasisCompeteByGuid(Map<String, Object> params);
	
	/**
	 * 从基础商品库调入选品
	 * @param params
	 * @return List - ProductBasis
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductBasis> queryCallProductXP(Map<String, Object> params) throws Exception;


	/**
	 *@Description: 修改状态
	 *@Param: guid 唯一标识
	 *@return: com.dhecp.common.core.domain.AjaxResult
	 *@Author: hlf
	 *@date: 2022-08-17 14:56
	 */
	AjaxResult updateState(Map<String, Object> params);


	/**
	 *@Description: 生成商品标PDF
	 *@return: 商品标pdf文件URL
	 *@Author: xdh
	 *@date: 2024-01-04 14:56
	 */
	String createGoodsPdf(String productCode, String productNameEn, Integer num);

}
